// RemoteMapper.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include <GdiPlus.h>
#include "RemoteMapper.h"
#include "RemoteMapperDlg.h"
#include "ConfigurationUtil.h"
#include "win32utility/RemoteEmuManager.h"
#include "MSIDManager.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CRemoteMapperApp

BEGIN_MESSAGE_MAP(CRemoteMapperApp, CWinApp)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CRemoteMapperApp construction

CRemoteMapperApp::CRemoteMapperApp()
{
	Gdiplus::GdiplusStartupInput gdiplusStartupInput;
	// Initialize GDI+.
	GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
}

CRemoteMapperApp::~CRemoteMapperApp(){
	Gdiplus::GdiplusShutdown(m_gdiplusToken);
}

// The one and only CRemoteMapperApp object

CRemoteMapperApp theApp;


// CRemoteMapperApp initialization

BOOL CRemoteMapperApp::InitInstance()
{
	// InitCommonControlsEx() is required on Windows XP if an application
	// manifest specifies use of ComCtl32.dll version 6 or later to enable
	// visual styles.  Otherwise, any window creation will fail.
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// Set this to include all the common control classes you want to use
	// in your application.
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();

	AfxEnableControlContainer();

	// Standard initialization
	// If you are not using these features and wish to reduce the size
	// of your final executable, you should remove from the following
	// the specific initialization routines you do not need
	// Change the registry key under which our settings are stored
	// TODO: You should modify this string to be something appropriate
	// such as the name of your company or organization
	SetRegistryKey(_T("17yoxi.com-Generated Applications"));

	//////////////////////////////////////////////////////////////////////////
	// initializing remote emu manager
	// affected by the motion control bit
	TM::Win32Utility::RemoteUtility::CRemoteEmuManager * pEmuManager = 0;
	pEmuManager = TM::Win32Utility::RemoteUtility::CRemoteEmuManager::getInstance();
	if ( pEmuManager )
	{
		pEmuManager->setEnableRecogControl( false );
		pEmuManager->setThreadMsg( WM_THREAD_REMOTEEMUEVENT );
	}

	CRemoteMapperDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with OK
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with Cancel
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}

int CRemoteMapperApp::ExitInstance(){
	Utility::Configuration::CConfigurationUtil::ReleaseInstance();
	
	// release remote emu manager
	Utility::Configuration::CConfigurationUtil::ReleaseInstance();
	TM::Win32Utility::RemoteUtility::CRemoteEmuManager::releaseInstance();

	// enable mouse 
	CMSIDManager msidManager;
	msidManager.Open_Filter();
	msidManager.EnableMouseData();
	msidManager.Close_Filter();

	return CWinApp::ExitInstance();
}
